/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.perutaxi.datos;

import com.perutaxi.entidades.eEmpresa;
import com.perutaxi.entidades.eEmpresaTaxista;
import java.io.Serializable;
import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 *
 * @author PeruTaxi
 */
public class dEmpresaTaxista implements Serializable {

    public static Date obtenerFechaActual() {
        Calendar calendario = Calendar.getInstance();
        return calendario.getTime();
    }

    public static eEmpresaTaxista inicializar() {
        eEmpresaTaxista empTaxista = new eEmpresaTaxista();
        empTaxista.setEmpresa(new eEmpresa());
        empTaxista.setNombres("");
        empTaxista.setApPaterno("");
        empTaxista.setApMaterno("");
        empTaxista.setDni("");
        empTaxista.setDireccion("");
        empTaxista.setTelefono("");
        empTaxista.setEmailLaboral("");
        empTaxista.setEmailPersonal("");
        empTaxista.setSexo("");
        empTaxista.setNroBrevete("");
        empTaxista.setImagen("");
        empTaxista.setMontoTotal(BigDecimal.ZERO);
        empTaxista.setMontoPagado(BigDecimal.ZERO);
        empTaxista.setMontoPendiente(BigDecimal.ZERO);
        empTaxista.setEstado(Boolean.TRUE);
        empTaxista.setCantAutos(0L);
        empTaxista.setCantReclamos(0L);
        empTaxista.setCantServicios(0L);
        empTaxista.setFechaRegistro(new Timestamp(obtenerFechaActual().getTime()));

        return empTaxista;
    }

    public static eEmpresaTaxista obtenerPorDni(String dni) throws Exception {
        eEmpresaTaxista empTaxista = new eEmpresaTaxista();
        Connection cnx = Conexion.getConexion();
        String query = "SELECT * FROM EMPRESA_TAXISTA WHERE DNI = '" + dni + "'";
        try {
            PreparedStatement ps = cnx.prepareCall(query);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                empTaxista.setId(rs.getLong(1));
                empTaxista.setEmpresa(dEmpresa.obtenerPorId(rs.getLong(2)));
                empTaxista.setNombres(rs.getString(3));
                empTaxista.setApPaterno(rs.getString(4));
                empTaxista.setApMaterno(rs.getString(5));
                empTaxista.setDni(rs.getString(6));
                empTaxista.setFechaNacimiento(rs.getTimestamp(7));
                empTaxista.setDireccion(rs.getString(8));
                empTaxista.setTelefono(rs.getString(9));
                empTaxista.setEmailLaboral(rs.getString(10));
                empTaxista.setEmailPersonal(rs.getString(11));
                empTaxista.setSexo(rs.getString(12));
                empTaxista.setNroBrevete(rs.getString(13));
                empTaxista.setImagen(rs.getString(14));
                empTaxista.setCantServicios(rs.getLong(15));
                empTaxista.setCantReclamos(rs.getLong(16));
                empTaxista.setCantAutos(rs.getLong(17));
                empTaxista.setMontoTotal(rs.getBigDecimal(18));
                empTaxista.setMontoPagado(rs.getBigDecimal(19));
                empTaxista.setMontoPendiente(rs.getBigDecimal(20));
                empTaxista.setEstado(rs.getBoolean(21));
                empTaxista.setFechaRegistro(rs.getTimestamp(22));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }

        return empTaxista;
    }

    public static eEmpresaTaxista obtenerPorId(Long id) throws Exception {
        eEmpresaTaxista empTaxista = new eEmpresaTaxista();
        Connection cnx = Conexion.getConexion();
        String query = "SELECT * FROM EMPRESA_TAXISTA WHERE ID = " + id;
        try {
            PreparedStatement ps = cnx.prepareCall(query);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                empTaxista.setId(rs.getLong(1));
                empTaxista.setEmpresa(dEmpresa.obtenerPorId(rs.getLong(2)));
                empTaxista.setNombres(rs.getString(3));
                empTaxista.setApPaterno(rs.getString(4));
                empTaxista.setApMaterno(rs.getString(5));
                empTaxista.setDni(rs.getString(6));
                empTaxista.setFechaNacimiento(rs.getTimestamp(7));
                empTaxista.setDireccion(rs.getString(8));
                empTaxista.setTelefono(rs.getString(9));
                empTaxista.setEmailLaboral(rs.getString(10));
                empTaxista.setEmailPersonal(rs.getString(11));
                empTaxista.setSexo(rs.getString(12));
                empTaxista.setNroBrevete(rs.getString(13));
                empTaxista.setImagen(rs.getString(14));
                empTaxista.setCantServicios(rs.getLong(15));
                empTaxista.setCantReclamos(rs.getLong(16));
                empTaxista.setCantAutos(rs.getLong(17));
                empTaxista.setMontoTotal(rs.getBigDecimal(18));
                empTaxista.setMontoPagado(rs.getBigDecimal(19));
                empTaxista.setMontoPendiente(rs.getBigDecimal(20));
                empTaxista.setEstado(rs.getBoolean(21));
                empTaxista.setFechaRegistro(rs.getTimestamp(22));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }

        return empTaxista;
    }

    public static List<eEmpresaTaxista> obtenerPorIdEmpresa(Long id) throws Exception {
        List<eEmpresaTaxista> lista = new ArrayList<eEmpresaTaxista>();
        Connection cnx = Conexion.getConexion();
        String query = "SELECT * FROM EMPRESA_TAXISTA WHERE EMPRESA =  " + id;
        try {
            PreparedStatement ps = cnx.prepareCall(query);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                eEmpresaTaxista ent = new eEmpresaTaxista();
                ent.setId(rs.getLong(1));
                ent.setEmpresa(dEmpresa.obtenerPorId(rs.getLong(2)));
                ent.setNombres(rs.getString(3));
                ent.setApPaterno(rs.getString(4));
                ent.setApMaterno(rs.getString(5));
                ent.setDni(rs.getString(6));
                ent.setFechaNacimiento(rs.getTimestamp(7));
                ent.setDireccion(rs.getString(8));
                ent.setTelefono(rs.getString(9));
                ent.setEmailLaboral(rs.getString(10));
                ent.setEmailPersonal(rs.getString(11));
                ent.setSexo(rs.getString(12));
                ent.setNroBrevete(rs.getString(13));
                ent.setImagen(rs.getString(14));
                ent.setCantServicios(rs.getLong(15));
                ent.setCantReclamos(rs.getLong(16));
                ent.setCantAutos(rs.getLong(17));
                ent.setMontoTotal(rs.getBigDecimal(18));
                ent.setMontoPagado(rs.getBigDecimal(19));
                ent.setMontoPendiente(rs.getBigDecimal(20));
                ent.setEstado(rs.getBoolean(21));
                ent.setFechaRegistro(rs.getTimestamp(22));
                lista.add(ent);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }

        return lista;
    }

    public static List<eEmpresaTaxista> obtenerActivos() throws Exception {
        List<eEmpresaTaxista> lista = new ArrayList<eEmpresaTaxista>();
        Connection cnx = Conexion.getConexion();
        String query = "SELECT * FROM EMPRESA_TAXISTA WHERE ESTADO = " + 1;
        try {
            PreparedStatement ps = cnx.prepareCall(query);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                eEmpresaTaxista ent = new eEmpresaTaxista();
                ent.setId(rs.getLong(1));
                ent.setEmpresa(dEmpresa.obtenerPorId(rs.getLong(2)));
                ent.setNombres(rs.getString(3));
                ent.setApPaterno(rs.getString(4));
                ent.setApMaterno(rs.getString(5));
                ent.setDni(rs.getString(6));
                ent.setFechaNacimiento(rs.getTimestamp(7));
                ent.setDireccion(rs.getString(8));
                ent.setTelefono(rs.getString(9));
                ent.setEmailLaboral(rs.getString(10));
                ent.setEmailPersonal(rs.getString(11));
                ent.setSexo(rs.getString(12));
                ent.setNroBrevete(rs.getString(13));
                ent.setImagen(rs.getString(14));
                ent.setCantServicios(rs.getLong(15));
                ent.setCantReclamos(rs.getLong(16));
                ent.setCantAutos(rs.getLong(17));
                ent.setMontoTotal(rs.getBigDecimal(18));
                ent.setMontoPagado(rs.getBigDecimal(19));
                ent.setMontoPendiente(rs.getBigDecimal(20));
                ent.setEstado(rs.getBoolean(21));
                ent.setFechaRegistro(rs.getTimestamp(22));
                lista.add(ent);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }

        return lista;
    }
    
    public static List<eEmpresaTaxista> obtenerTop5(Long id) throws Exception {
        List<eEmpresaTaxista> lista = new ArrayList<eEmpresaTaxista>();
        List<eEmpresaTaxista> aux = new ArrayList<eEmpresaTaxista>();
        Connection cnx = Conexion.getConexion();
        String query = "SELECT * FROM EMPRESA_TAXISTA WHERE EMPRESA = " + id + " ORDER BY CANT_SERVICIOS DESC";
        try {
            PreparedStatement ps = cnx.prepareCall(query);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                eEmpresaTaxista ent = new eEmpresaTaxista();
                ent.setId(rs.getLong(1));
                ent.setEmpresa(dEmpresa.obtenerPorId(rs.getLong(2)));
                ent.setNombres(rs.getString(3));
                ent.setApPaterno(rs.getString(4));
                ent.setApMaterno(rs.getString(5));
                ent.setDni(rs.getString(6));
                ent.setFechaNacimiento(rs.getTimestamp(7));
                ent.setDireccion(rs.getString(8));
                ent.setTelefono(rs.getString(9));
                ent.setEmailLaboral(rs.getString(10));
                ent.setEmailPersonal(rs.getString(11));
                ent.setSexo(rs.getString(12));
                ent.setNroBrevete(rs.getString(13));
                ent.setImagen(rs.getString(14));
                ent.setCantServicios(rs.getLong(15));
                ent.setCantReclamos(rs.getLong(16));
                ent.setCantAutos(rs.getLong(17));
                ent.setMontoTotal(rs.getBigDecimal(18));
                ent.setMontoPagado(rs.getBigDecimal(19));
                ent.setMontoPendiente(rs.getBigDecimal(20));
                ent.setEstado(rs.getBoolean(21));
                ent.setFechaRegistro(rs.getTimestamp(22));
                lista.add(ent);
            }
            int cont = 0;
            for (eEmpresaTaxista x: lista) {
                cont++;
                if (cont <= 5) {
                    aux.add(x);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }

        return aux;
    }

    public static List<eEmpresaTaxista> obtenerTodos() throws Exception {
        List<eEmpresaTaxista> lista = new ArrayList<eEmpresaTaxista>();
        Connection cnx = Conexion.getConexion();
        String query = "SELECT * FROM EMPRESA_TAXISTA";
        try {
            PreparedStatement ps = cnx.prepareCall(query);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                eEmpresaTaxista ent = new eEmpresaTaxista();
                ent.setId(rs.getLong(1));
                ent.setEmpresa(dEmpresa.obtenerPorId(rs.getLong(2)));
                ent.setNombres(rs.getString(3));
                ent.setApPaterno(rs.getString(4));
                ent.setApMaterno(rs.getString(5));
                ent.setDni(rs.getString(6));
                ent.setFechaNacimiento(rs.getTimestamp(7));
                ent.setDireccion(rs.getString(8));
                ent.setTelefono(rs.getString(9));
                ent.setEmailLaboral(rs.getString(10));
                ent.setEmailPersonal(rs.getString(11));
                ent.setSexo(rs.getString(12));
                ent.setNroBrevete(rs.getString(13));
                ent.setImagen(rs.getString(14));
                ent.setCantServicios(rs.getLong(15));
                ent.setCantReclamos(rs.getLong(16));
                ent.setCantAutos(rs.getLong(17));
                ent.setMontoTotal(rs.getBigDecimal(18));
                ent.setMontoPagado(rs.getBigDecimal(19));
                ent.setMontoPendiente(rs.getBigDecimal(20));
                ent.setEstado(rs.getBoolean(21));
                ent.setFechaRegistro(rs.getTimestamp(22));
                lista.add(ent);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }

        return lista;
    }

    public static boolean guardar(eEmpresaTaxista empTaxista) throws Exception {
        boolean retorno = true;
        Connection cnx = Conexion.getConexion();
        String query = "INSERT INTO EMPRESA_TAXISTA VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
        try {
            PreparedStatement ps = cnx.prepareStatement(query);
            ps.setLong(1, empTaxista.getId());
            ps.setLong(2, empTaxista.getEmpresa().getId());
            ps.setString(3, empTaxista.getNombres().toUpperCase());
            ps.setString(4, empTaxista.getApPaterno().toUpperCase());
            ps.setString(5, empTaxista.getApMaterno().toUpperCase());
            ps.setString(6, empTaxista.getDni().toUpperCase());
            ps.setTimestamp(7, empTaxista.getFechaNacimiento());
            ps.setString(8, empTaxista.getDireccion().toUpperCase());
            ps.setString(9, empTaxista.getTelefono().toUpperCase());
            ps.setString(10, empTaxista.getEmailLaboral().toUpperCase());
            ps.setString(11, empTaxista.getEmailPersonal().toUpperCase());
            ps.setString(12, empTaxista.getSexo().toUpperCase());
            ps.setString(13, empTaxista.getNroBrevete().toUpperCase());
            ps.setString(14, empTaxista.getImagen());
            ps.setLong(15, empTaxista.getCantServicios());
            ps.setLong(16, empTaxista.getCantReclamos());
            ps.setLong(17, empTaxista.getCantAutos());
            ps.setBigDecimal(18, empTaxista.getMontoTotal());
            ps.setBigDecimal(19, empTaxista.getMontoPagado());
            ps.setBigDecimal(20, empTaxista.getMontoPendiente());
            ps.setBoolean(21, empTaxista.getEstado());
            ps.setTimestamp(22, empTaxista.getFechaRegistro());
            ps.execute();
        } catch (Exception e) {
            e.printStackTrace();
            retorno = false;
        } finally {
            cnx.close();
        }

        return retorno;
    }

    public static boolean actualizar(eEmpresaTaxista empTaxista) throws Exception {
        boolean retorno = true;
        Connection cnx = Conexion.getConexion();
        String query = "UPDATE EMPRESA_TAXISTA SET EMPRESA = ?, NOMBRES = ?, AP_PATERNO = ?, AP_MATERNO = ?, DNI = ?, FECHA_NACIMIENTO = ?, ";
        query += "DIRECCION = ?, TELEFONO = ?, EMAIL_LABORAL = ?, EMAIL_PERSONAL = ?, SEXO = ?, NRO_BREVETE = ?, IMAGEN = ?, CANT_SERVICIOS = ?, ";
        query += "CANT_RECLAMOS = ?, CANT_AUTOS = ?, MONTO_TOTAL = ?, MONTO_PAGADO = ?, MONTO_PENDIENTE = ?, ESTADO = ? WHERE ID = ?";
        try {
            PreparedStatement ps = cnx.prepareStatement(query);
            ps.setLong(1, empTaxista.getEmpresa().getId());
            ps.setString(2, empTaxista.getNombres().toUpperCase());
            ps.setString(3, empTaxista.getApPaterno().toUpperCase());
            ps.setString(4, empTaxista.getApMaterno().toUpperCase());
            ps.setString(5, empTaxista.getDni().toUpperCase());
            ps.setTimestamp(6, empTaxista.getFechaNacimiento());
            ps.setString(7, empTaxista.getDireccion().toUpperCase());
            ps.setString(8, empTaxista.getTelefono().toUpperCase());
            ps.setString(9, empTaxista.getEmailLaboral().toUpperCase());
            ps.setString(10, empTaxista.getEmailPersonal().toUpperCase());
            ps.setString(11, empTaxista.getSexo().toUpperCase());
            ps.setString(12, empTaxista.getNroBrevete().toUpperCase());
            ps.setString(13, empTaxista.getImagen());
            ps.setLong(14, empTaxista.getCantServicios());
            ps.setLong(15, empTaxista.getCantReclamos());
            ps.setLong(16, empTaxista.getCantAutos());
            ps.setBigDecimal(17, empTaxista.getMontoTotal());
            ps.setBigDecimal(18, empTaxista.getMontoPagado());
            ps.setBigDecimal(19, empTaxista.getMontoPendiente());
            ps.setBoolean(20, empTaxista.getEstado());
            ps.setLong(21, empTaxista.getId());
            ps.execute();
        } catch (Exception e) {
            e.printStackTrace();
            retorno = false;
        } finally {
            cnx.close();
        }

        return retorno;
    }
}
